/*
 * Copyright (c) 2022，公司名称
 * All rights reserved.
 * 文件名称：high_uart.h
 * 摘要：高边串口
 * 当前版本：V1.0.0,WCD,2023/1/10,初版
 * 历史版本：Vx.x.x，编写者/修改者，修改时间，修改内容（重大发布时，总结重点变更内容）
 */

#ifndef HIGH_ADC_H
#define HIGH_ADC_H
/*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓应用层数据定义开始↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
#include <stdint.h>
#include "drv_typedef.h"
#if 1
/*600k = 4016*/
#define NTC_OPEN (4016u)
/*100 = 34*/
#define NTC_SHORT (34u)

/* 5 / 4096 =0.001220703125 */
#define ADC_BIT_VALUE (0.001220703125)
#define ADC_TO_VOLTAGE(x) (ADC_BIT_VALUE * (x))
#define VBAT_CONVERT(x) ((x) * 4)
#define CURR_CONVERT(x) ((x) / 0.072)
//#define CURR_CONVERT(x) ((x) / 0.272)
#define ADC0_BUFF_LEN      10U 
#define HIGH_ADC0_BUFF_LEN      10U     /* ADC BUFF 长度 */
#define ADC0_BUFF_NUM      4U            /* ADC BUFF 数量(与采样通道数据一致) */
/*AD 采样的原始信号  (由于程序处理的缘故，结构体 ADC_ORIG_DATA_DEF 内只能添加 ADC_ORIG_DATA_TYPE_DEF 成员) */
typedef struct
{
    uint16_t wave[ADC0_BUFF_LEN];                                            /*采样AD值 */
    uint16_t sum;                                                            /*采样AD值的总和 */
    uint16_t max;                                                            /*采样AD值最大 */
    uint16_t min;                                                            /*采样AD值最小 */
    uint16_t avg;                                                            /*采样AD平均值 */
} ADC_ORIG_DATA_TYPE_DEF;
typedef struct
{
    ADC_ORIG_DATA_TYPE_DEF PCB_temp;
    ADC_ORIG_DATA_TYPE_DEF sensor1_out;
    ADC_ORIG_DATA_TYPE_DEF sensor2_in;
    ADC_ORIG_DATA_TYPE_DEF Vbat;
} low_ADC_ORIG_DATA_struct;
typedef struct
{
    ADC_ORIG_DATA_TYPE_DEF V15; //ADC0_CH1
    ADC_ORIG_DATA_TYPE_DEF hv_voltage; //ADC0_CH5
    ADC_ORIG_DATA_TYPE_DEF pcb_temp;  //ADC0_CH3
    ADC_ORIG_DATA_TYPE_DEF AMP; //ADC0_CH9
} high_ADC_ORIG_DATA_struct;
extern low_ADC_ORIG_DATA_struct low_ADC_OrgiData;  /* ADC 采样原始数据 */
extern high_ADC_ORIG_DATA_struct high_ADC_OrgiData;     /* ADC 采样原始数据 */
#endif
/*↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑应用层数据定义结束↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑*/
typedef enum
{
  ADC_CH1 = 0,
  ADC_CH5,
  ADC_CH3,
	ADC_CH9
} channel_ADC;
// void adc_clock_init(void);
void high_adc_pwm_init(void);
void high_adc_pwm_clock_init();
void high_adc_sw_clock_init(void);
void high_adc_sw_init(void);
void ADC5ms_trigger_switching(void);
/*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓应用层函数定义开始↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
#if 1
EM_TRUE_FALSE adc_get_curr_status(void);
uint16_t adc_get_curr_init(void);
uint32_t get_current_ADC_value(void);
#endif
/*↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑应用层函数定义结束↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑*/
#endif
